// 爬虫
const axios = require('axios')
const fs = require('fs')
const path = require('path')
const Apify = require('apify')

// 爬取掘金网站前端前20篇推荐文章
// 抓包获得http请求信息
// const url = 'https://api.juejin.cn/recommend_api/v1/article/recommend_cate_feed'
// const method = 'POST'
// const data = {
//     cate_id: '6809637767543259144',
//     cursor: '0',
//     id_type: 2,
//     limit: 20,  // 获取20条
//     sort_type: 200,
// }
// axios({
//     url,
//     method,
//     data,
// }).then(res => {
//     if (res.status === 200) {
//         const list = res.data.data
//         fs.writeFile(path.resolve(__dirname) + '/juejin.txt', JSON.stringify(list), 'utf8', err => console.log(err))
//     }
// })

// 使用apify爬虫工具，可以获取静态网页内容   https://github.com/apify/apify-js
Apify.main(async () => {
    const requestQueue = await Apify.openRequestQueue()     // 请求队列
    requestQueue.addRequest({                               // 添加需要请求的url
        url: 'https://movie.douban.com/top250',
    })
    const crawler = new Apify.CheerioCrawler({      // 创建爬虫实例，传入请求队列和解析工具
        requestQueue,
        handlePageFunction,
    })
    async function handlePageFunction({request, $}) {   // 解析网页内容函数
        const title = $('title').text()
        console.log(title)
        await Apify.utils.enqueueLinks({    // 可以提供动态url请求队列，爬取下一页，
            $,
            requestQueue,
            selector: '.next > a',  // 下一页按钮
            baseUrl: request.loadedUrl,     // 根据baseUrl会将a中的href补全
        })
        const movies = parseMovie($)
        console.log(JSON.stringify(movies))
    }
    await crawler.run()
})

function parseMovie($) {    // 获取需要的所有的DOM节点数据
    const movieDoms = $('.grid_view .item')
    const movies = []
    movieDoms.each((index, item) => {
        movies.push({
            rank: $(item).find('.pic em').text(),
            name: $(item).find('.title').text(),
            score: $(item).find('rating_num').text(),
            sketch: $(item).find('.inq').text(),
        })
    })
    return movies
}